package main

import "fmt"

// 函数的递归
func factorial(n int) int {
	if n == 0 {
		return 1
	}
	return n * factorial(n-1)
}

// 实现阶层相加
func add(n int) int {
	if n == 0 {
		return 0
	}
	return n + add(n-1)
}

// 闭包
func add2() func(x int) int {
	var i = 10
	return func(x int) int {
		i += x
		return i
	}
}

func main() {
	//1、匿名函数
	func() {
		fmt.Println("test") //test
	}()

	//接受参数的匿名自执行函数   类似于js
	func(x, y int) {
		fmt.Println(x + y)
	}(1, 6) //7

	var myFn = func() {
		fmt.Println("myFn") // myFn
	}
	myFn()

	fmt.Println(factorial(5)) // 120
	fmt.Println(add(100))     //5050

	var test = add2()
	fmt.Printf("%T\n", test) // test是返回的那个函数
	fmt.Println(test(10))    //20
	fmt.Println(test(10))    //30
	fmt.Println(test(10))    //40
}
